#  定义任务 这个文件名一定是tasks.py
from celery_task.main import celery_app
from celery_task.sms import constants
from celery_task.sms.yuntongxun.SendMessage import CCP
import logging

logger = logging.getLogger("django")


# bind：保证task对象会作为第一个参数自动传入
# name：异步任务别名
# retry_backoff：异常自动重试的时间间隔 第n次(retry_backoff×2^(n-1))s
# max_retries：异常自动重试次数的上限
@celery_app.task(bind=True, name='celery_send_sms', retry_backoff=3)  # 标记该函数是任务，并给任务起个名字
def celery_send_sms(self, mobile, sms_code):
    try:
        result = CCP().send_msg(constants.SEND_SMS_TEMPLATE_ID, mobile, (sms_code, constants.SMS_CODE_REDIS_EXPIRES // 60))
    except Exception as e:
        logger.error(e)
        # 有异常自动重发三次
        raise self.retry(exc=e, max_retries=3)
    if result != 0:
        raise self.retry(exc=Exception("发送短信失败"), max_retries=3)
    return result
